package dt.board.notice;

import com.opensymphony.xwork2.ActionSupport;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

import java.util.*;
import java.io.Reader;
import java.io.IOException;
import java.util.Map;

import dt.board.notice.noticeBoardVO;

import org.apache.struts2.interceptor.SessionAware;

import dt.board.notice.pagingAction;

public class noticeListAction extends ActionSupport implements SessionAware{
	private Map session;
	public static Reader reader; //파일 스트림을 위한 reader
	public static SqlMapClient sqlMapper;  // SqlMapClient API를 사용하기 위한 sqlMapper 객채
	
	private List<noticeBoardVO> list = new ArrayList<noticeBoardVO>();
	
	private String searchKeyword;
	private int searchNum;
	
	private int currentPage = 1; 
	private int totalCount; 
	private int blockCount = 10; 
	private int blockPage = 5; 
	private String pagingHtml;
	private pagingAction page;
	private int adminCheck;
	private int num = 0;
	
	private int BoardFlag = 1;
	
	// 생성자 
	public noticeListAction() throws IOException{
		
		reader = Resources.getResourceAsReader("sqlMapConfig.xml"); //sqlMapConfig.xml 파일의 설정내용을 가져온다. 
		sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); // sqlMapConfig.xml의 내용을 적용한 sqlMapper 객채 생성 
		
		reader.close(); 
		
	}
	
	//게시판 LIST 액션 
	
	public String execute() throws Exception{
		// 모든 글을 가져와 리스트에 넣는다. 
		
		
		
		list = sqlMapper.queryForList("notice.selectAll"); 
		
		totalCount = list.size(); // 전체 글 갯수를 구한다.  
		
		//pagingAction 객체 생성 
		page = new pagingAction(currentPage, totalCount, blockCount, blockPage, num, ""); 
		pagingHtml = page.getPagingHtml().toString(); // 페이지 HTML생성
		
		//현재 페이지에서 보여줄 마지막 글의 번호 설정. 
		int lastCount = totalCount; 
		
		//현재 페이지의 마지막 글의 번호가 전체의 마지막 글 번호보다 작으면 
		// lastCount 를  +1  번호로 설정 
		if(page.getEndCount() < totalCount) 
				lastCount = page.getEndCount() +1; 
		
		// 전체 리스트에서 현재 페이지만큼의 리스트만 가져온다. 
		list = list.subList(page.getStartCount(), lastCount);
		
		
		
	    if (session.get("id") != null ) {
	    	
	    	if(session.get("id").equals("admin1")){
	    		adminCheck = 1; 
	    	} 
	    }
			
	    return SUCCESS; 
		
	}
	
	
	
	
	
	public List<noticeBoardVO> getList() {
		return list;
	}
	public void setList(List<noticeBoardVO> list) {
		this.list = list;
	}
	public int getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	public int getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}
	public int getBlockCount() {
		return blockCount;
	}
	public void setBlockCount(int blockCount) {
		this.blockCount = blockCount;
	}
	public int getBlockPage() {
		return blockPage;
	}
	public void setBlockPage(int blockPage) {
		this.blockPage = blockPage;
	}
	public String getPagingHtml() {
		return pagingHtml;
	}
	public void setPagingHtml(String pagingHtml) {
		this.pagingHtml = pagingHtml;
	}
	public pagingAction getPage() {
		return page;
	}
	public void setPage(pagingAction page) {
		this.page = page;
	}

	public Map getSession() {
		return session;
	}

	public void setSession(Map session) {
		this.session = session;
	}

	public int getAdminCheck() {
		return adminCheck;
	}

	public void setAdminCheck(int adminCheck) {
		this.adminCheck = adminCheck;
	}

	public int getBoardFlag() {
		return BoardFlag;
	}

	public void setBoardFlag(int boardFlag) {
		BoardFlag = boardFlag;
	}

	public int getSearchNum() {
		return searchNum;
	}

	public void setSearchNum(int searchNum) {
		this.searchNum = searchNum;
	}

	public String getSearchKeyword() {
		return searchKeyword;
	}

	public void setSearchKeyword(String searchKeyword) {
		this.searchKeyword = searchKeyword;
	} 
	

}
